์ค์๊ฐ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ๋ฐ ๋ถ์์ ์ํ Apache Flink์ ๊ฐ๋ ฅํ ๊ธฐ๋ฅ์ ์์๋ณด์ธ์. ํ์ฅ ๊ฐ๋ฅํ๊ณ ์ฅ์ ์ ๊ฐํ ์คํธ๋ฆฌ๋ฐ ์ ํ๋ฆฌ์ผ์ด์ ๊ตฌ์ถ์ ์ํ ์ํคํ ์ฒ, ์ฌ์ฉ ์ฌ๋ก, ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ๋ฐฐ์๋๋ค.
Apache Flink๋ฅผ ์ด์ฉํ ์ค์๊ฐ ๋ถ์: ์ข ํฉ ๊ฐ์ด๋
์ค๋๋ ๊ณผ ๊ฐ์ด ๋น ๋ฅด๊ฒ ๋ณํํ๋ ์ธ์์์ ๊ธฐ์ ์ ๋ณํํ๋ ์ํฉ์ ์ฆ๊ฐ์ ์ผ๋ก ๋์ํด์ผ ํฉ๋๋ค. ์ค์๊ฐ ๋ถ์์ ํตํด ์กฐ์ง์ ๋ฐ์ดํฐ๊ฐ ๋์ฐฉํ๋ ์ฆ์ ๋ถ์ํ์ฌ ์ฆ๊ฐ์ ์ธ ํต์ฐฐ๋ ฅ์ ์ ๊ณตํ๊ณ ์๊ธฐ์ ์ ํ ์์ฌ ๊ฒฐ์ ์ ๋ด๋ฆด ์ ์์ต๋๋ค. Apache Flink๋ ๋ฐ๋ก ์ด๋ฌํ ๋ชฉ์ ์ ์ํด ์ค๊ณ๋ ๊ฐ๋ ฅํ ์คํ ์์ค ์คํธ๋ฆผ ์ฒ๋ฆฌ ํ๋ ์์ํฌ์ ๋๋ค. ์ด ๊ฐ์ด๋์์๋ Apache Flink, ์ฃผ์ ๊ฐ๋ , ์ํคํ ์ฒ, ์ฌ์ฉ ์ฌ๋ก ๋ฐ ๋ชจ๋ฒ ์ฌ๋ก์ ๋ํ ํฌ๊ด์ ์ธ ๊ฐ์๋ฅผ ์ ๊ณตํฉ๋๋ค.
Apache Flink๋ ๋ฌด์์ธ๊ฐ?
Apache Flink๋ ์ ํ ๋ฐ ๋ฌดํ ๋ฐ์ดํฐ ์คํธ๋ฆผ์ ๋ํ ์ํ ์ ์ฅ ๊ณ์ฐ์ ์ํ ๋ถ์ฐํ ์คํ ์์ค ์ฒ๋ฆฌ ์์ง์ ๋๋ค. ๋ชจ๋ ์ผ๋ฐ์ ์ธ ํด๋ฌ์คํฐ ํ๊ฒฝ์์ ์คํ๋๋๋ก ์ค๊ณ๋์์ผ๋ฉฐ, ์ธ๋ฉ๋ชจ๋ฆฌ ์๋์ ๋ชจ๋ ๊ท๋ชจ์์ ๊ณ์ฐ์ ์ํํฉ๋๋ค. Flink๋ ์ค์๊ฐ ๋ถ์, ๋ฐ์ดํฐ ํ์ดํ๋ผ์ธ, ETL ํ๋ก์ธ์ค ๋ฐ ์ด๋ฒคํธ ๊ธฐ๋ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ ํฌํจํ ๊ด๋ฒ์ํ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ๊ธฐ ์ํ ๊ฐ๋ ฅํ๊ณ ๋ค์ฌ๋ค๋ฅํ ํ๋ซํผ์ ์ ๊ณตํฉ๋๋ค.
Apache Flink์ ์ฃผ์ ํน์ง:
- ์ง์ ํ ์คํธ๋ฆฌ๋ฐ ๋ฐ์ดํฐํ๋ก์ฐ: Flink๋ ์ง์ ํ ์คํธ๋ฆฌ๋ฐ ํ๋ก์ธ์๋ก, ๋ง์ดํฌ๋ก ๋ฐฐ์น์ ํ์ ์์ด ๋ฐ์ดํฐ ๋ ์ฝ๋๊ฐ ๋์ฐฉํ๋ ์ฆ์ ์ฒ๋ฆฌํฉ๋๋ค. ์ด๋ฅผ ํตํด ๋งค์ฐ ๋ฎ์ ์ง์ฐ ์๊ฐ๊ณผ ๋์ ์ฒ๋ฆฌ๋์ ์คํํ ์ ์์ต๋๋ค.
- ์ํ ๊ด๋ฆฌ: Flink๋ ๊ฐ๋ ฅํ๊ณ ํจ์จ์ ์ธ ์ํ ๊ด๋ฆฌ ๊ธฐ๋ฅ์ ์ ๊ณตํ์ฌ ์๊ฐ์ ๋ฐ๋ผ ์ปจํ ์คํธ๋ฅผ ์ ์งํ๋ ๋ณต์กํ ์ํ ์ ์ฅ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ ์ ์์ต๋๋ค. ์ด๋ ์ธ์ ํ, ์ฌ๊ธฐ ํ์ง, ๋ณต์ก ์ด๋ฒคํธ ์ฒ๋ฆฌ์ ๊ฐ์ ์์ ์ ๋งค์ฐ ์ค์ํฉ๋๋ค.
- ๋ด๊ฒฐํจ์ฑ: Flink๋ ๋ด์ฅ๋ ๋ด๊ฒฐํจ์ฑ ๋ฉ์ปค๋์ฆ์ ์ ๊ณตํ์ฌ ์ฅ์ ๋ฐ์ ์์๋ ์ ํ๋ฆฌ์ผ์ด์ ์ด ์์ ์ ์ผ๋ก ๊ณ์ ์คํ๋๋๋ก ๋ณด์ฅํฉ๋๋ค. ์ฒดํฌํฌ์ธํ ๋ฐ ๋ณต๊ตฌ ๋ฉ์ปค๋์ฆ์ ์ฌ์ฉํ์ฌ ์ ํํ ํ ๋ฒ(exactly-once) ์ฒ๋ฆฌ ์๋งจํฑ์ ๋ณด์ฅํฉ๋๋ค.
- ํ์ฅ์ฑ: Flink๋ ๋๊ท๋ชจ ๋ฐ์ดํฐ ๋ณผ๋ฅจ๊ณผ ๋์ ์ฒ๋ฆฌ๋์ ์ฒ๋ฆฌํ๊ธฐ ์ํด ์ํ์ ์ผ๋ก ํ์ฅ๋๋๋ก ์ค๊ณ๋์์ต๋๋ค. ํด๋ฌ์คํฐ์ ๋ฆฌ์์ค๋ฅผ ์ฝ๊ฒ ์ถ๊ฐํ์ฌ ์ฒ๋ฆฌ ์ฉ๋์ ๋๋ฆด ์ ์์ต๋๋ค.
- ๋ค์ฉ์ฑ: Flink๋ Apache Kafka, Apache Cassandra, Amazon Kinesis ๋ฑ ๋ค์ํ ๋ฐ์ดํฐ ์์ค์ ์ฑํฌ๋ฅผ ์ง์ํฉ๋๋ค. ๋ํ Java, Scala, Python, SQL์ฉ API๋ฅผ ์ ๊ณตํ์ฌ ๋ค์ํ ๊ฐ๋ฐ์๋ค์ด ์ฝ๊ฒ ์ ๊ทผํ ์ ์์ต๋๋ค.
- ์ ํํ ํ ๋ฒ ์๋งจํฑ(Exactly-Once Semantics): Flink๋ ์ฅ์ ๋ฐ์ ์์๋ ์ํ ์ ๋ฐ์ดํธ์ ๋ํด ์ ํํ ํ ๋ฒ ์๋งจํฑ์ ๋ณด์ฅํฉ๋๋ค. ์ด๋ ๋ฐ์ดํฐ์ ์ผ๊ด์ฑ๊ณผ ์ ํ์ฑ์ ๋ณด์ฅํฉ๋๋ค.
- ์๋์ฐ์: Flink๋ ๊ฐ๋ ฅํ ์๋์ฐ์ ๊ธฐ๋ฅ์ ์ ๊ณตํ์ฌ ์๊ฐ ์๋์ฐ์ ๊ฑธ์ณ ๋ฐ์ดํฐ๋ฅผ ์ง๊ณํ๊ณ ๋ถ์ํ ์ ์์ต๋๋ค. ์ด๋ ์ด๋ ํ๊ท ๊ณ์ฐ, ์ถ์ธ ๊ฐ์ง, ์ด์ ์งํ ์๋ณ๊ณผ ๊ฐ์ ์์ ์ ํ์์ ์ ๋๋ค.
Flink ์ํคํ ์ฒ
Apache Flink ์ํคํ ์ฒ๋ ๊ฐ๋ ฅํ๊ณ ํ์ฅ ๊ฐ๋ฅํ ์คํธ๋ฆผ ์ฒ๋ฆฌ ํ๋ซํผ์ ์ ๊ณตํ๊ธฐ ์ํด ํจ๊ป ์๋ํ๋ ๋ช ๊ฐ์ง ์ฃผ์ ๊ตฌ์ฑ ์์๋ก ์ด๋ฃจ์ด์ ธ ์์ต๋๋ค.
JobManager
JobManager๋ Flink ํด๋ฌ์คํฐ์ ์ค์ ์ฝ๋๋ค์ดํฐ์ ๋๋ค. ๋ค์๊ณผ ๊ฐ์ ์ญํ ์ ๋ด๋นํฉ๋๋ค:
- ๋ฆฌ์์ค ๊ด๋ฆฌ: ํด๋ฌ์คํฐ ์ ๋ฐ์ ๊ฑธ์ณ ๋ฆฌ์์ค(๋ฉ๋ชจ๋ฆฌ, CPU)๋ฅผ ํ ๋นํ๊ณ ๊ด๋ฆฌํฉ๋๋ค.
- ์์ ์ค์ผ์ค๋ง: ๋ฆฌ์์ค ๊ฐ์ฉ์ฑ ๋ฐ ๋ฐ์ดํฐ ์ข ์์ฑ์ ๋ฐ๋ผ TaskManager์ ์์ ์ ์ค์ผ์ค๋งํฉ๋๋ค.
- ๋ด๊ฒฐํจ์ฑ: ์ฅ์ ๋ฐ์ ์ ์ฒดํฌํฌ์ธํ ๋ฐ ๋ณต๊ตฌ ํ๋ก์ธ์ค๋ฅผ ์กฐ์ ํฉ๋๋ค.
TaskManager
TaskManager๋ Flink ํด๋ฌ์คํฐ์ ์์ปค ๋ ธ๋์ ๋๋ค. JobManager๋ก๋ถํฐ ํ ๋น๋ฐ์ ์์ ์ ์คํํฉ๋๋ค. ๊ฐ TaskManager๋ ๋ค์์ ์ํํฉ๋๋ค:
- ์์ ์คํ: ์ค์ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ๋ก์ง์ ์คํํฉ๋๋ค.
- ์ํ ๊ด๋ฆฌ: ์ํ ์ ์ฅ ์ฐ์ฐ์๋ฅผ ์ํ ์ํ๋ฅผ ์ ์งํฉ๋๋ค.
- ํต์ : ํ์์ ๋ฐ๋ผ ๋ค๋ฅธ TaskManager์ ๋ฐ์ดํฐ๋ฅผ ๊ตํํฉ๋๋ค.
ํด๋ฌ์คํฐ ๋ฆฌ์์ค ๊ด๋ฆฌ์
Flink๋ ๋ค์๊ณผ ๊ฐ์ ๋ค์ํ ํด๋ฌ์คํฐ ๋ฆฌ์์ค ๊ด๋ฆฌ์์ ํตํฉ๋ ์ ์์ต๋๋ค:
- Apache Hadoop YARN: Hadoop ํด๋ฌ์คํฐ๋ฅผ ์ํ ์ธ๊ธฐ ์๋ ๋ฆฌ์์ค ๊ด๋ฆฌ์์ ๋๋ค.
- Apache Mesos: ๋ฒ์ฉ ํด๋ฌ์คํฐ ๊ด๋ฆฌ์์ ๋๋ค.
- Kubernetes: ์ปจํ ์ด๋ ์ค์ผ์คํธ๋ ์ด์ ํ๋ซํผ์ ๋๋ค.
- ๋ ๋ฆฝ ์คํํ(Standalone): Flink๋ ํด๋ฌ์คํฐ ๊ด๋ฆฌ์ ์์ด ๋ ๋ฆฝ ์คํํ ๋ชจ๋๋ก๋ ์คํํ ์ ์์ต๋๋ค.
๋ฐ์ดํฐํ๋ก์ฐ ๊ทธ๋ํ
Flink ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฐ์ฐ์์ ๋ฐ์ดํฐ ์คํธ๋ฆผ์ผ๋ก ๊ตฌ์ฑ๋ ๋ฐ์ดํฐํ๋ก์ฐ ๊ทธ๋ํ๋ก ํํ๋ฉ๋๋ค. ์ฐ์ฐ์๋ ํํฐ๋ง, ๋งคํ, ์ง๊ณ, ์กฐ์ธ ๋ฑ ๋ฐ์ดํฐ์ ๋ํ ๋ณํ์ ์ํํฉ๋๋ค. ๋ฐ์ดํฐ ์คํธ๋ฆผ์ ์ฐ์ฐ์ ๊ฐ์ ๋ฐ์ดํฐ ํ๋ฆ์ ๋ํ๋ ๋๋ค.
Apache Flink์ ์ฌ์ฉ ์ฌ๋ก
Apache Flink๋ ๋ค์ํ ์ฐ์ ๋ถ์ผ์ ๊ฑธ์ณ ๊ด๋ฒ์ํ ์ค์๊ฐ ๋ถ์ ์ฌ์ฉ ์ฌ๋ก์ ๋งค์ฐ ์ ํฉํฉ๋๋ค.
์ฌ๊ธฐ ํ์ง
Flink๋ ๊ฑฐ๋ ๋ฐ์ดํฐ์ ํจํด๊ณผ ์ด์ ์งํ๋ฅผ ๋ถ์ํ์ฌ ์ฌ๊ธฐ์ฑ ๊ฑฐ๋๋ฅผ ์ค์๊ฐ์ผ๋ก ํ์งํ๋ ๋ฐ ์ฌ์ฉ๋ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ๊ธ์ต ๊ธฐ๊ด์ ์์น, ๊ธ์ก, ๋น๋์ ๊ฐ์ ์์๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์์ฌ์ค๋ฌ์ด ์ ์ฉ์นด๋ ๊ฑฐ๋๋ฅผ ์๋ณํ๊ธฐ ์ํด Flink๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
์์: ๊ธ๋ก๋ฒ ๊ฒฐ์ ์ฒ๋ฆฌ ์ ์ฒด๋ ๊ฑฐ๋๋ฅผ ์ค์๊ฐ์ผ๋ก ๋ชจ๋ํฐ๋งํ์ฌ ์งง์ ์๊ฐ ๋ด์ ์ฌ๋ฌ ๊ตญ๊ฐ์์ ๋ค์์ ๊ฑฐ๋๊ฐ ๋ฐ์ํ๋ ๊ฒ๊ณผ ๊ฐ์ ๋น์ ์์ ์ธ ํจํด์ ํ์งํ๊ณ ์ฆ๊ฐ์ ์ธ ์ฌ๊ธฐ ๊ฒฝ๋ณด๋ฅผ ๋ฐ๋ํฉ๋๋ค.
์ค์๊ฐ ๋ชจ๋ํฐ๋ง
Flink๋ ์์คํ ๊ณผ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ค์๊ฐ์ผ๋ก ๋ชจ๋ํฐ๋งํ๊ณ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ ๋ ์ฆ๊ฐ์ ์ธ ๊ฒฝ๊ณ ๋ฅผ ์ ๊ณตํ๋ ๋ฐ ์ฌ์ฉ๋ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ํต์ ํ์ฌ๋ Flink๋ฅผ ์ฌ์ฉํ์ฌ ๋คํธ์ํฌ ํธ๋ํฝ์ ๋ชจ๋ํฐ๋งํ๊ณ ์ ์ฌ์ ์ธ ์ค๋จ์ด๋ ์ฑ๋ฅ ๋ณ๋ชฉ ํ์์ ์๋ณํ ์ ์์ต๋๋ค.
์์: ๋ค๊ตญ์ ๋ฌผ๋ฅ ํ์ฌ๋ Flink๋ฅผ ์ฌ์ฉํ์ฌ ์ฐจ๋ ๋ฐ ํ๋ฌผ์ ์์น์ ์ํ๋ฅผ ์ค์๊ฐ์ผ๋ก ์ถ์ ํ์ฌ ์ง์ฐ ๋ฐ ์ค๋จ์ ๋ํ ์ฌ์ ์๋ฐฉ์ ๊ด๋ฆฌ๋ฅผ ๊ฐ๋ฅํ๊ฒ ํฉ๋๋ค.
๊ฐ์ธํ
Flink๋ ์ฌ์ฉ์์ ๊ฒ์ ๊ธฐ๋ก, ๊ตฌ๋งค ๋ด์ญ ๋ฐ ๊ธฐํ ๋ฐ์ดํฐ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ค์๊ฐ์ผ๋ก ์ฌ์ฉ์์๊ฒ ๊ฐ์ธํ๋ ์ถ์ฒ ๋ฐ ์ ์์ ์ ๊ณตํ๋ ๋ฐ ์ฌ์ฉ๋ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ์ ์์๊ฑฐ๋ ํ์ฌ๋ Flink๋ฅผ ์ฌ์ฉํ์ฌ ํ์ฌ ์ฌ์ฉ์์ ๋ธ๋ผ์ฐ์ง ํ๋์ ๊ธฐ๋ฐ์ผ๋ก ์ ํ์ ์ถ์ฒํ ์ ์์ต๋๋ค.
์์: ๊ตญ์ ์ ์ธ ์คํธ๋ฆฌ๋ฐ ์๋น์ค๋ Flink๋ฅผ ์ฌ์ฉํ์ฌ ์ฌ์ฉ์์ ์์ฒญ ๊ธฐ๋ก ๋ฐ ์ ํธ๋์ ๋ฐ๋ผ ์ฝํ ์ธ ์ถ์ฒ์ ๊ฐ์ธํํ์ฌ ์ฐธ์ฌ๋์ ์ ์ง์จ์ ํฅ์์ํต๋๋ค.
์ฌ๋ฌผ ์ธํฐ๋ท(IoT)
Flink๋ IoT ์ฅ์น์์ ๋ฐ์ํ๋ ๋ฐ์ดํฐ๋ฅผ ์ค์๊ฐ์ผ๋ก ์ฒ๋ฆฌํ๋ ๋ฐ ํ์ํ ์ ํ์ ๋๋ค. IoT ์ฅ์น์์ ์์ฑ๋๋ ๋์ฉ๋ ๋ฐ ๊ณ ์์ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๊ณ ๋ณต์กํ ๋ถ์์ ์ํํ์ฌ ๊ฐ์น ์๋ ํต์ฐฐ๋ ฅ์ ์ถ์ถํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ์ค๋งํธ ์ํฐ๋ Flink๋ฅผ ์ฌ์ฉํ์ฌ ์ผ์ ๋ฐ์ดํฐ๋ฅผ ๋ถ์ํ์ฌ ๊ตํต ํ๋ฆ์ ์ต์ ํํ๊ณ , ๊ณต๊ณต ์์ ์ ๊ฐ์ ํ๋ฉฐ, ์๋์ง ์๋น๋ฅผ ์ค์ผ ์ ์์ต๋๋ค.
์์: ๊ธ๋ก๋ฒ ์ ์กฐ ํ์ฌ๋ Flink๋ฅผ ์ฌ์ฉํ์ฌ ์ฅ๋น์ ์ผ์ ๋ฐ์ดํฐ๋ฅผ ์ค์๊ฐ์ผ๋ก ๋ถ์ํ์ฌ ์์ธก ์ ์ง๋ณด์๋ฅผ ๊ฐ๋ฅํ๊ฒ ํ๊ณ ๋ค์ดํ์์ ์ค์ ๋๋ค.
๋ก๊ทธ ๋ถ์
Flink๋ ๋ก๊ทธ ๋ฐ์ดํฐ๋ฅผ ์ค์๊ฐ์ผ๋ก ๋ถ์ํ์ฌ ๋ณด์ ์ํ, ์ฑ๋ฅ ๋ฌธ์ ๋ฐ ๊ธฐํ ์ด์ ์งํ๋ฅผ ์๋ณํ๋ ๋ฐ ์ฌ์ฉ๋ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ๋ณด์ ํ์ฌ๋ Flink๋ฅผ ์ฌ์ฉํ์ฌ ์๋ฒ ๋ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ก๊ทธ ๋ฐ์ดํฐ๋ฅผ ๋ถ์ํ์ฌ ์ ์ฌ์ ์ธ ๋ณด์ ์นจํด๋ฅผ ํ์งํ ์ ์์ต๋๋ค.
์์: ๋ค๊ตญ์ ์ํํธ์จ์ด ํ์ฌ๋ Flink๋ฅผ ์ฌ์ฉํ์ฌ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ก๊ทธ ๋ฐ์ดํฐ๋ฅผ ์ค์๊ฐ์ผ๋ก ๋ถ์ํ์ฌ ์ฑ๋ฅ ๋ณ๋ชฉ ํ์๊ณผ ๋ณด์ ์ทจ์ฝ์ ์ ์๋ณํฉ๋๋ค.
ํด๋ฆญ์คํธ๋ฆผ ๋ถ์
Flink๋ ์ฌ์ฉ์ ํด๋ฆญ์คํธ๋ฆผ ๋ฐ์ดํฐ๋ฅผ ์ค์๊ฐ์ผ๋ก ๋ถ์ํ์ฌ ์ฌ์ฉ์ ํ๋์ ์ดํดํ๊ณ , ์น์ฌ์ดํธ ๋์์ธ์ ์ต์ ํํ๋ฉฐ, ๋ง์ผํ ์บ ํ์ธ์ ๊ฐ์ ํ๋ ๋ฐ ์ฌ์ฉ๋ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ์จ๋ผ์ธ ์๋งค์ ์ฒด๋ Flink๋ฅผ ์ฌ์ฉํ์ฌ ํด๋ฆญ์คํธ๋ฆผ ๋ฐ์ดํฐ๋ฅผ ๋ถ์ํ์ฌ ์ธ๊ธฐ ์ ํ์ ์๋ณํ๊ณ , ์ ํ ๋ฐฐ์น๋ฅผ ์ต์ ํํ๋ฉฐ, ๋ง์ผํ ๋ฉ์์ง๋ฅผ ๊ฐ์ธํํ ์ ์์ต๋๋ค.
์์: ๊ธ๋ก๋ฒ ๋ด์ค ๊ธฐ๊ด์ Flink๋ฅผ ์ฌ์ฉํ์ฌ ์ฌ์ฉ์ ํด๋ฆญ์คํธ๋ฆผ ๋ฐ์ดํฐ๋ฅผ ์ค์๊ฐ์ผ๋ก ๋ถ์ํ์ฌ ์ธ๊ธฐ ์๋ ๋ด์ค ๊ธฐ์ฌ๋ฅผ ์๋ณํ๊ณ ์ฝํ ์ธ ์ ๋ฌ์ ์ต์ ํํฉ๋๋ค.
๊ธ์ต ์๋น์ค
Flink๋ ๊ธ์ต ์๋น์ค์์ ๋ค์๊ณผ ๊ฐ์ ๋ค์ํ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฌ์ฉ๋ฉ๋๋ค:
- ์๊ณ ๋ฆฌ์ฆ ํธ๋ ์ด๋ฉ: ์์ฅ ๋ฐ์ดํฐ๋ฅผ ์ค์๊ฐ์ผ๋ก ๋ถ์ํ์ฌ ์๋์ผ๋ก ๊ฑฐ๋๋ฅผ ์คํํฉ๋๋ค.
- ์ํ ๊ด๋ฆฌ: ์ํ ๋ ธ์ถ์ ๋ชจ๋ํฐ๋งํ๊ณ ์ ์ฌ์ ์ธ ์ํ์ ์๋ณํฉ๋๋ค.
- ๊ท์ ์ค์: ๊ท์ ์๊ฑด ์ค์๋ฅผ ๋ณด์ฅํฉ๋๋ค.
ํต์
Flink๋ ํต์ ๋ถ์ผ์์ ๋ค์๊ณผ ๊ฐ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฌ์ฉ๋ฉ๋๋ค:
- ๋คํธ์ํฌ ๋ชจ๋ํฐ๋ง: ๋คํธ์ํฌ ์ฑ๋ฅ์ ๋ชจ๋ํฐ๋งํ๊ณ ์ ์ฌ์ ์ธ ์ค๋จ์ ์๋ณํฉ๋๋ค.
- ์ฌ๊ธฐ ํ์ง: ๋ชจ๋ฐ์ผ ๋คํธ์ํฌ์์์ ์ฌ๊ธฐ ํ๋์ ํ์งํฉ๋๋ค.
- ๊ณ ๊ฐ ๋ถ์: ๊ณ ๊ฐ ๋ฐ์ดํฐ๋ฅผ ๋ถ์ํ์ฌ ์๋น์ค๋ฅผ ๊ฐ์ธํํ๊ณ ๊ณ ๊ฐ ๊ฒฝํ์ ๊ฐ์ ํฉ๋๋ค.
Apache Flink ์์ํ๊ธฐ
Apache Flink๋ฅผ ์์ํ๋ ค๋ฉด Flink ๋ฐํ์ ํ๊ฒฝ์ ์ค์นํ๊ณ ๊ฐ๋ฐ ํ๊ฒฝ์ ์ค์ ํด์ผ ํฉ๋๋ค. ๊ธฐ๋ณธ์ ์ธ ๊ฐ์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
1. ์ค์น
๊ณต์ ์น์ฌ์ดํธ(https://flink.apache.org/)์์ ์ต์ ๋ฒ์ ์ Apache Flink๋ฅผ ๋ค์ด๋ก๋ํ์ธ์. ๋ฌธ์์ ์ง์นจ์ ๋ฐ๋ผ ๋ก์ปฌ ๋จธ์ ์ด๋ ํด๋ฌ์คํฐ์ Flink๋ฅผ ์ค์นํฉ๋๋ค.
2. ๊ฐ๋ฐ ํ๊ฒฝ
IntelliJ IDEA๋ Eclipse์ ๊ฐ์ Java IDE๋ฅผ ์ฌ์ฉํ์ฌ Flink ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ๋ฐํ ์ ์์ต๋๋ค. ๋ํ ํ๋ก์ ํธ์ Flink ์ข ์์ฑ์ ์ถ๊ฐํด์ผ ํฉ๋๋ค. Maven์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ pom.xml ํ์ผ์ ๋ค์ ์ข ์์ฑ์ ์ถ๊ฐํ ์ ์์ต๋๋ค:
<dependencies>
<dependency>
<groupId>org.apache.flink</groupId>
<artifactId>flink-java</artifactId>
<version>{flink.version}</version>
</dependency>
<dependency>
<groupId>org.apache.flink</groupId>
<artifactId>flink-streaming-java</artifactId>
<version>{flink.version}</version>
</dependency>
<dependency>
<groupId>org.apache.flink</groupId>
<artifactId>flink-clients</artifactId>
<version>{flink.version}</version>
</dependency>
</dependencies>
{flink.version}์ ์ฌ์ฉ ์ค์ธ ์ค์ Flink ๋ฒ์ ์ผ๋ก ๋ฐ๊พธ์ธ์.
3. ๊ธฐ๋ณธ Flink ์ ํ๋ฆฌ์ผ์ด์
๋ค์์ ์์ผ์์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ด ๋๋ฌธ์๋ก ๋ณํํ ํ ์ฝ์์ ์ถ๋ ฅํ๋ ๊ฐ๋จํ Flink ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ ๋๋ค:
import org.apache.flink.streaming.api.datastream.DataStream;
import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
public class SocketTextStreamExample {
public static void main(String[] args) throws Exception {
// StreamExecutionEnvironment ์์ฑ
final StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
// ์์ผ์ ์ฐ๊ฒฐ
DataStream<String> dataStream = env.socketTextStream("localhost", 9999);
// ๋ฐ์ดํฐ๋ฅผ ๋๋ฌธ์๋ก ๋ณํ
DataStream<String> uppercaseStream = dataStream.map(String::toUpperCase);
// ๊ฒฐ๊ณผ๋ฅผ ์ฝ์์ ์ถ๋ ฅ
uppercaseStream.print();
// ์์
์คํ
env.execute("Socket Text Stream Example");
}
}
์ด ์์ ๋ฅผ ์คํํ๋ ค๋ฉด ๋ก์ปฌ ๋จธ์ ์์ netcat ์๋ฒ๋ฅผ ์์ํด์ผ ํฉ๋๋ค:
nc -lk 9999
๊ทธ๋ฐ ๋ค์ IDE์์ Flink ์ ํ๋ฆฌ์ผ์ด์ ์ ์คํํ๊ฑฐ๋ Flink ํด๋ฌ์คํฐ์ ์ ์ถํ ์ ์์ต๋๋ค.
Apache Flink ๊ฐ๋ฐ์ ์ํ ๋ชจ๋ฒ ์ฌ๋ก
๊ฒฌ๊ณ ํ๊ณ ํ์ฅ ๊ฐ๋ฅํ Flink ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ๋ ค๋ฉด ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ๋ฐ๋ฅด๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
1. ์ํ ๊ด๋ฆฌ
- ์ฌ๋ฐ๋ฅธ ์ํ ๋ฐฑ์๋ ์ ํ: Flink๋ ๋ฉ๋ชจ๋ฆฌ, RocksDB, ํ์ผ ์์คํ ๊ธฐ๋ฐ ์ํ ๋ฐฑ์๋ ๋ฑ ๋ค์ํ ์ํ ๋ฐฑ์๋๋ฅผ ์ง์ํฉ๋๋ค. ์ฑ๋ฅ, ํ์ฅ์ฑ, ๋ด๊ฒฐํจ์ฑ ์ธก๋ฉด์์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์๊ตฌ ์ฌํญ์ ๊ฐ์ฅ ์ ํฉํ ์ํ ๋ฐฑ์๋๋ฅผ ์ ํํ์ธ์.
- ์ํ ํฌ๊ธฐ ์ต์ํ: ํฐ ์ํ๋ ์ฑ๋ฅ์ ์ํฅ์ ๋ฏธ์น๊ณ ์ฒดํฌํฌ์ธํ ์๊ฐ์ ์ฆ๊ฐ์ํฌ ์ ์์ต๋๋ค. ํจ์จ์ ์ธ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ๊ณ ๋ถํ์ํ ๋ฐ์ดํฐ๋ฅผ ์ ๊ฑฐํ์ฌ ์ํ ํฌ๊ธฐ๋ฅผ ์ต์ํํ์ธ์.
- ์ํ TTL ๊ณ ๋ ค: ์ํ ๋ฐ์ดํฐ๊ฐ ์ ํ๋ ์๊ฐ ๋์๋ง ์ ํจํ ๊ฒฝ์ฐ, ์ํ TTL(Time-To-Live)์ ์ฌ์ฉํ์ฌ ์ค๋๋ ๋ฐ์ดํฐ๋ฅผ ์๋์ผ๋ก ๋ง๋ฃ์ํค๊ณ ์ ๊ฑฐํ์ธ์.
2. ๋ด๊ฒฐํจ์ฑ
- ์ฒดํฌํฌ์ธํ ํ์ฑํ: ์ฒดํฌํฌ์ธํ ์ Flink์ ๋ด๊ฒฐํจ์ฑ์ ํ์์ ์ ๋๋ค. ์ฒดํฌํฌ์ธํ ์ ํ์ฑํํ๊ณ ์ฒดํฌํฌ์ธํธ ๊ฐ๊ฒฉ์ ์ ์ ํ๊ฒ ๊ตฌ์ฑํ์ธ์.
- ์ ๋ขฐํ ์ ์๋ ์ฒดํฌํฌ์ธํธ ์คํ ๋ฆฌ์ง ์ ํ: HDFS, Amazon S3 ๋๋ Azure Blob Storage์ ๊ฐ์ ์ ๋ขฐํ ์ ์๊ณ ๋ด๊ตฌ์ฑ ์๋ ์คํ ๋ฆฌ์ง ์์คํ ์ ์ฒดํฌํฌ์ธํธ๋ฅผ ์ ์ฅํ์ธ์.
- ์ฒดํฌํฌ์ธํธ ์ง์ฐ ์๊ฐ ๋ชจ๋ํฐ๋ง: ์ฒดํฌํฌ์ธํธ ์ง์ฐ ์๊ฐ์ ๋ชจ๋ํฐ๋งํ์ฌ ์ ์ฌ์ ์ธ ์ฑ๋ฅ ๋ฌธ์ ๋ฅผ ์๋ณํ์ธ์.
3. ์ฑ๋ฅ ์ต์ ํ
- ๋ฐ์ดํฐ ์ง์ญ์ฑ ์ฌ์ฉ: ๋คํธ์ํฌ ํธ๋ํฝ์ ์ต์ํํ๊ธฐ ์ํด ๋ฐ์ดํฐ๊ฐ ์์ค์ ์ต๋ํ ๊ฐ๊น๊ฒ ์ฒ๋ฆฌ๋๋๋ก ํ์ธ์.
- ๋ฐ์ดํฐ ์คํ ๋ฐฉ์ง: ๋ฐ์ดํฐ ์คํ๋ ๋ถ๊ท ๋ฑํ ์ํฌ๋ก๋ ๋ถ์ฐ๊ณผ ์ฑ๋ฅ ๋ณ๋ชฉ ํ์์ ์ด๋ํ ์ ์์ต๋๋ค. ํค ํํฐ์ ๋ ๋ฐ ์ฌ์ ์ง๊ณ์ ๊ฐ์ ๊ธฐ์ ์ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ ์คํ๋ฅผ ์ํํ์ธ์.
- ๋ฉ๋ชจ๋ฆฌ ๊ตฌ์ฑ ํ๋: ์ฑ๋ฅ์ ์ต์ ํํ๊ธฐ ์ํด Flink์ ๋ฉ๋ชจ๋ฆฌ ์ค์ ์ ์ ์ ํ๊ฒ ๊ตฌ์ฑํ์ธ์.
4. ๋ชจ๋ํฐ๋ง ๋ฐ ๋ก๊น
- Flink์ ์น UI ์ฌ์ฉ: Flink๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ํ๋ฅผ ๋ชจ๋ํฐ๋งํ๊ณ , ๋ก๊ทธ๋ฅผ ๋ณด๊ณ , ์ฑ๋ฅ ๋ฌธ์ ๋ฅผ ์ง๋จํ ์ ์๋ ์น UI๋ฅผ ์ ๊ณตํฉ๋๋ค.
- ๋ฉํธ๋ฆญ ์ฌ์ฉ: Flink๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฑ๋ฅ์ ๋ชจ๋ํฐ๋งํ๋ ๋ฐ ์ฌ์ฉํ ์ ์๋ ๋ค์ํ ๋ฉํธ๋ฆญ์ ์ ๊ณตํฉ๋๋ค. Prometheus ๋๋ Grafana์ ๊ฐ์ ๋ชจ๋ํฐ๋ง ์์คํ ๊ณผ ํตํฉํ์ฌ ์ด๋ฌํ ๋ฉํธ๋ฆญ์ ์๊ฐํํ์ธ์.
- ๋ก๊น ์ฌ์ฉ: SLF4J ๋๋ Logback๊ณผ ๊ฐ์ ๋ก๊น ํ๋ ์์ํฌ๋ฅผ ์ฌ์ฉํ์ฌ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ด๋ฒคํธ์ ์ค๋ฅ๋ฅผ ๊ธฐ๋กํ์ธ์.
5. ๋ณด์ ๊ณ ๋ ค ์ฌํญ
- ์ธ์ฆ ๋ฐ ๊ถํ ๋ถ์ฌ: ์ ์ ํ ์ธ์ฆ ๋ฐ ๊ถํ ๋ถ์ฌ ๋ฉ์ปค๋์ฆ์ผ๋ก Flink ํด๋ฌ์คํฐ๋ฅผ ๋ณดํธํ์ธ์.
- ๋ฐ์ดํฐ ์ํธํ: ์ ์ก ์ค์ด๊ฑฐ๋ ์ ์ฅ๋ ๋ฏผ๊ฐํ ๋ฐ์ดํฐ๋ฅผ ์ํธํํ์ธ์.
- ์ ๊ธฐ์ ์ธ ๋ณด์ ๊ฐ์ฌ: ์ ๊ธฐ์ ์ธ ๋ณด์ ๊ฐ์ฌ๋ฅผ ์ํํ์ฌ ์ ์ฌ์ ์ธ ์ทจ์ฝ์ ์ ์๋ณํ๊ณ ํด๊ฒฐํ์ธ์.
Apache Flink์ ๋ค๋ฅธ ์คํธ๋ฆผ ์ฒ๋ฆฌ ํ๋ ์์ํฌ ๋น๊ต
Apache Flink๋ ์ ๋์ ์ธ ์คํธ๋ฆผ ์ฒ๋ฆฌ ํ๋ ์์ํฌ์ด์ง๋ง, Apache Spark Streaming, Apache Kafka Streams, Apache Storm๊ณผ ๊ฐ์ ๋ค๋ฅธ ์ต์ ๊ณผ ์ด๋ป๊ฒ ๋น๊ต๋๋์ง ์ดํดํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. ๊ฐ ํ๋ ์์ํฌ๋ ๊ฐ์ ๊ณผ ์ฝ์ ์ ๊ฐ์ง๊ณ ์์ด ๋ค์ํ ์ฌ์ฉ ์ฌ๋ก์ ์ ํฉํฉ๋๋ค.
Apache Flink ๋ Apache Spark ์คํธ๋ฆฌ๋ฐ
- ์ฒ๋ฆฌ ๋ชจ๋ธ: Flink๋ ์ง์ ํ ์คํธ๋ฆฌ๋ฐ ๋ชจ๋ธ์ ์ฌ์ฉํ๋ ๋ฐ๋ฉด, Spark Streaming์ ๋ง์ดํฌ๋ก ๋ฐฐ์น ์ ๊ทผ ๋ฐฉ์์ ์ฌ์ฉํฉ๋๋ค. ์ด๋ ์ผ๋ฐ์ ์ผ๋ก Flink๊ฐ ๋ ๋ฎ์ ์ง์ฐ ์๊ฐ์ ์ ๊ณตํจ์ ์๋ฏธํฉ๋๋ค.
- ์ํ ๊ด๋ฆฌ: Flink๋ Spark Streaming๋ณด๋ค ๋ ๋ฐ์ ๋ ์ํ ๊ด๋ฆฌ ๊ธฐ๋ฅ์ ๊ฐ์ง๊ณ ์์ต๋๋ค.
- ๋ด๊ฒฐํจ์ฑ: ๋ ํ๋ ์์ํฌ ๋ชจ๋ ๋ด๊ฒฐํจ์ฑ์ ์ ๊ณตํ์ง๋ง, Flink์ ์ฒดํฌํฌ์ธํ ๋ฉ์ปค๋์ฆ์ด ์ผ๋ฐ์ ์ผ๋ก ๋ ํจ์จ์ ์ธ ๊ฒ์ผ๋ก ๊ฐ์ฃผ๋ฉ๋๋ค.
- API ์ง์: Spark Streaming์ Flink๊ฐ ๊ธฐ๋ณธ์ ์ผ๋ก ์ง์ํ์ง ์๋ R ๋ฐ Python ์ง์์ ํตํด ๋ ๋์ API ์ง์์ ์ ๊ณตํฉ๋๋ค.
Apache Flink ๋ Apache Kafka ์คํธ๋ฆผ์ฆ
- ํตํฉ: Kafka Streams๋ Apache Kafka์ ๊ธด๋ฐํ๊ฒ ํตํฉ๋์ด ์์ด Kafka์ ํฌ๊ฒ ์์กดํ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ข์ ์ ํ์ ๋๋ค.
- ๋ฐฐํฌ: Kafka Streams๋ ์ผ๋ฐ์ ์ผ๋ก Kafka ์ํ๊ณ์ ์ผ๋ถ๋ก ๋ฐฐํฌ๋๋ ๋ฐ๋ฉด, Flink๋ ๋ ๋ฆฝ์ ์ผ๋ก ๋ฐฐํฌ๋ ์ ์์ต๋๋ค.
- ๋ณต์ก์ฑ: Kafka Streams๋ ํนํ ๊ธฐ๋ณธ์ ์ธ ์คํธ๋ฆผ ์ฒ๋ฆฌ ์์ ์ ๊ฒฝ์ฐ Flink๋ณด๋ค ์ค์ ๋ฐ ๊ด๋ฆฌ๊ฐ ๋ ๊ฐ๋จํ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค.
Apache Flink ๋ Apache Storm
- ์ฑ์๋: Flink๋ Storm๋ณด๋ค ๋ ์ฑ์ํ๊ณ ๊ธฐ๋ฅ์ด ํ๋ถํ ํ๋ ์์ํฌ์ ๋๋ค.
- ์ ํํ ํ ๋ฒ ์๋งจํฑ: Flink๋ ์ ํํ ํ ๋ฒ ์ฒ๋ฆฌ ์๋งจํฑ์ ์ ๊ณตํ๋ ๋ฐ๋ฉด, Storm์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ต์ ํ ๋ฒ(at-least-once) ์๋งจํฑ๋ง ์ ๊ณตํฉ๋๋ค.
- ์ฑ๋ฅ: Flink๋ ์ผ๋ฐ์ ์ผ๋ก Storm๋ณด๋ค ๋ ๋์ ์ฑ๋ฅ์ ์ ๊ณตํฉ๋๋ค.
Apache Flink์ ๋ฏธ๋
Apache Flink๋ ์๋ก์ด ๊ธฐ๋ฅ๊ณผ ๊ฐ์ ์ฌํญ์ด ์ ๊ธฐ์ ์ผ๋ก ์ถ๊ฐ๋๋ฉด์ ๊ณ์ํด์ ๋ฐ์ ํ๊ณ ๊ฐ์ ๋๊ณ ์์ต๋๋ค. ๊ฐ๋ฐ์ ์ฃผ์ ์์ญ ์ค ์ผ๋ถ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- ํฅ์๋ SQL ์ง์: ์ฌ์ฉ์๊ฐ ์คํธ๋ฆฌ๋ฐ ๋ฐ์ดํฐ๋ฅผ ๋ ์ฝ๊ฒ ์ฟผ๋ฆฌํ๊ณ ๋ถ์ํ ์ ์๋๋ก SQL API๋ฅผ ๊ฐ์ ํฉ๋๋ค.
- ๋จธ์ ๋ฌ๋ ํตํฉ: Flink๋ฅผ ๋จธ์ ๋ฌ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํตํฉํ์ฌ ์ค์๊ฐ ๋จธ์ ๋ฌ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ํ์ฑํํฉ๋๋ค.
- ํด๋ผ์ฐ๋ ๋ค์ดํฐ๋ธ ๋ฐฐํฌ: Kubernetes์ ๊ฐ์ ํด๋ผ์ฐ๋ ๋ค์ดํฐ๋ธ ๋ฐฐํฌ ํ๊ฒฝ์ ๋ํ ์ง์์ ๊ฐ์ ํฉ๋๋ค.
- ์ถ๊ฐ ์ต์ ํ: ์ฑ๋ฅ๊ณผ ํ์ฅ์ฑ์ ์ต์ ํํ๊ธฐ ์ํ ์ง์์ ์ธ ๋ ธ๋ ฅ.
๊ฒฐ๋ก
Apache Flink๋ ์กฐ์ง์ด ๋์ ์ฒ๋ฆฌ๋, ๋ฎ์ ์ง์ฐ ์๊ฐ ๋ฐ ๋ด๊ฒฐํจ์ฑ์ ๊ฐ์ถ ์ค์๊ฐ ๋ถ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ ์ ์๋๋ก ์ง์ํ๋ ๊ฐ๋ ฅํ๊ณ ๋ค์ฌ๋ค๋ฅํ ์คํธ๋ฆผ ์ฒ๋ฆฌ ํ๋ ์์ํฌ์ ๋๋ค. ์ฌ๊ธฐ ํ์ง ์์คํ , ์ค์๊ฐ ๋ชจ๋ํฐ๋ง ์ ํ๋ฆฌ์ผ์ด์ ๋๋ ๊ฐ์ธํ๋ ์ถ์ฒ ์์ง์ ๊ตฌ์ถํ๋ Flink๋ ์ฑ๊ณต์ ํ์ํ ๋๊ตฌ์ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค. ํต์ฌ ๊ฐ๋ , ์ํคํ ์ฒ ๋ฐ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ์ดํดํจ์ผ๋ก์จ Flink์ ๊ฐ๋ ฅํ ๊ธฐ๋ฅ์ ํ์ฉํ์ฌ ์คํธ๋ฆฌ๋ฐ ๋ฐ์ดํฐ์ ๊ฐ์น๋ฅผ ์คํํ ์ ์์ต๋๋ค. ์ค์๊ฐ ํต์ฐฐ๋ ฅ์ ๋ํ ์์๊ฐ ๊ณ์ ์ฆ๊ฐํจ์ ๋ฐ๋ผ Apache Flink๋ ๋น ๋ฐ์ดํฐ ๋ถ์ ์ธ๊ณ์์ ์ ์ ๋ ์ค์ํ ์ญํ ์ ํ ๊ฒ์ ๋๋ค.
์ด ๊ฐ์ด๋๋ Apache Flink๋ฅผ ์ดํดํ๊ธฐ ์ํ ๊ฐ๋ ฅํ ๊ธฐ๋ฐ์ ์ ๊ณตํฉ๋๋ค. ์ถ๊ฐ ํ์ต ๋ฐ ์ค์ ์ ์ฉ์ ์ํด ๊ณต์ ๋ฌธ์์ ์ปค๋ฎค๋ํฐ ๋ฆฌ์์ค๋ฅผ ํ์ํ๋ ๊ฒ์ ๊ณ ๋ คํด๋ณด์ธ์.